#pragma once

#include "GdfConfig.h"
#include "GdfStdHeaders.h"

namespace Gdf {

	//---------------------------------------------------------//
	// Integer formats of fixed bit width
	typedef unsigned __int64 uint64;
	typedef unsigned int uint32;
	typedef unsigned short uint16;
	typedef unsigned char uint8;
	typedef __int64 int64;
	typedef int int32;
	typedef short int16;
	typedef char int8;
	typedef float float32;
	typedef double float64;

#define _GT TEXT

#if GDF_UNICODE_STRING
	typedef std::wstring _StringBase;
	typedef std::basic_stringstream<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > _StringStreamBase;
	typedef wchar_t gchar;
#else
	typedef std::string _StringBase;
	typedef std::basic_stringstream<char,std::char_traits<char>,std::allocator<char> > _StringStreamBase;
	typedef char gchar;
#endif

	typedef _StringBase String;
	typedef _StringStreamBase StringStream;
	typedef StringStream stringstream;


// define custom new
#ifdef _DEBUG
#	define GDF_NEW new(_CLIENT_BLOCK, __FILE__, __LINE__)
#	define GDF_NEW_ARR new(_CLIENT_BLOCK, __FILE__, __LINE__)
#else
#	define GDF_NEW new
#	define GDF_NEW_ARR new
#endif

#define GDF_RELEASE(x) x->Release(); delete x; x=NULL;
#define GDF_DELETE(x) delete x; x=NULL;
#define GDF_DELETE_ARR(x) delete []x; x=NULL;


}	//namespace Gdf